﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataConverter
{
    internal class ConsoleInvoker
    {
        /// <summary>
        /// 用于执行DOS自带的命令并返回执行结果（仅包括执行结果信息）。
        /// 由于DOS执行几乎不会卡死，所以没有设置等待时间。
        /// 调用格式如： RunDosCommand("dir", "*.exe);
        /// </summary>
        /// <param name="doscmd">待调用的DOS命令。</param>
        /// <param name="arguments">参数列表</param>
        /// <returns></returns>
        public static string RunCommand(string cmd, string arguments, int timeout_ms=3000)
        {
            Process p = new Process();
            p.StartInfo.FileName = cmd;
            p.StartInfo.Arguments = arguments;
            p.StartInfo.UseShellExecute = false; // 不显示用户界面
            p.StartInfo.RedirectStandardOutput = true; // 是否重
            p.StartInfo.CreateNoWindow = true;
            // 返回数据
            string output = "";
            try
            {
                if (p.Start())//开始进程  
                {
                    p.WaitForExit(timeout_ms); //等待进程结束，等待时间为指定的毫秒  
                    output = p.StandardOutput.ReadToEnd();//读取进程的输出
                    if (output != null)
                        output = output.Trim(new char[] { '\r', '\n'});
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);//捕获异常，输出异常信息
            }
            finally
            {
                if (p != null)
                    p.Close();
            }

            return output;
        }

    }
}
